
// 绑定输入框
$(function(){
	$.jform.bindNumberInput(".input_number", false);
	$.jform.bindNumberInput(".input_price", true);
	$.jform.bindLetterInput(".input_letter");
	$.jform.bindLetterInput(".input_uppercase", 1);
	$.jform.bindLetterInput(".input_lowercase", 2);
});

$.extend({
	jform : {

		/**
		 * 判断是否为空
		 */
		isEmpty : function(data){
			return !data || data == null || data == "";
		},
		
		/**
		 * 判断是否为boolean类型
		 */
		isBoolean : function(data){
			var _type = typeof(data);
			var booleanRegx = /true|false/;
			if(_type == 'boolean'){
				return true;
			}else if(_type == 'string'){
				return booleanRegx.test(data);
			}
			return false;
		},
		
		/**
		 * 判断是否为integer类型
		 */
		isInteger : function(data){
			return $.jform.isNumber(data) && ((data + "").indexOf('.') == -1);
		},
		
		/**
		 * 判断是否为数字
		 */
		isNumber : function(data){
			var _type = typeof(data);
			if(_type == 'number'){
				return true;
			}else if(_type == 'string'){
				return !isNaN(data);
			}
			return false;
		},
		
		/**
		 * json数据排序
		 * json 需要排序的数据
		 * key 排序的key
		 * reverse 是否倒叙
		 * primer (parse)转换类型
		 */
		jsonSort : function(json, key, reverse) {
		},

		/**
		 * 判断是否为json字符串
		 */
		isJson : function(str) {
			var filtered = str.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, '');
			return /^[\],:{}\s]*$/.test(filtered);
		},
		
		/**
		 * 设置光标位置
		 */
		focusCursor : function(element, index){
			var dom = $(element).get(0);
			if(dom){
				var i = 0;
				if(typeof(index) == 'number'){
					i = index;
				}else if(index == 'end'){
					i = $(element).val() ? $(element).val().length : 0;
				}
				if(dom.selectionStart){
					dom.selectionStart = i;
					dom.selectionEnd = i;
				}else{
					var range = dom.createTextRange();
	                range.move("character", i);
	                range.select();
				}
			}
		},

		/**
		 * json填充表单
		 * @param data 需要填充的data
		 * @param elementId 寻找dom元素的对象，默认为body
		 * @param eqAttr 匹配的attr，默认为name
		 * @param valAttr 匹配的赋值attr，默认为value,text/html可选
		 */
		json2Form : function(data, elementId, eqAttr, valAttr, onBinded) {
			if (!data || data == null) {
				return;
			}
			if ($.jform.isEmpty(elementId)) {
				elementId = "body";
			}
			if ($.jform.isEmpty(eqAttr)) {
				eqAttr = "name";
			}
			if (data) {
				for (var d in data) {
					if (d) {
						var findJqDom = elementId + " [" + eqAttr + "='" + d + "']";
						if(valAttr){
							if(valAttr == 'text'){
								$(findJqDom).text(data[d]);
							}else if(valAttr == 'html'){
								$(findJqDom).html(data[d]);
							}else{
								$(findJqDom).attr(valAttr, data[d]);
							}
						}else{
							$(findJqDom).val(data[d]);
						}
						if(typeof(onBinded) == 'function'){
							onBinded(findJqDom);
						}
					}
				}
			}
		},

		/**
		 * 表单获取json数据
		 * @param elementId 寻找dom元素的对象，默认为body
		 * @param call 操作后方法
		 * @returns data
		 */
		form2Json : function(elementId, call) {
			if ($.jform.isEmpty(elementId)) {
				elementId = "body";
			}
			var findJqDom = elementId + " :input";
			var data = new Object();
			$(findJqDom).each(function(i, o) {
				if ("button,reset".indexOf($(this).attr("type")) > -1) {
					return true;
				}
				data[$(this).attr("name")] = $(this).val();
			});
			if (call && typeof (call) == "function") {
				call(data);
			}
			return data;
		},

		/**
		 * 清空表单数据
		 * @param elementId 寻找dom元素的对象，默认为body
		 */
		cleanFormData : function(elementId) {
			if ($.jform.isEmpty(elementId)) {
				elementId = "body";
			}
			var findJqDom = elementId + " :input";
			$(findJqDom).each(function(i, o) {
				if ("button,reset".indexOf($(this).attr("type")) > -1) {
					return true;
				}
				$(this).val("");
			});
		},
		
		/**
		 * 重置表单数据
		 * @param saveFormElement formId
		 */
		resetForm : function(saveFormElement){
			if(!saveFormElement || saveFormElement == null || saveFormElement.length == 0){
	        	saveFormElement = "saveform";
	        }
			$("#" + saveFormElement).get(0).reset();
		},
		
		/**
		 * 提交表单
		 * @param url 表单提交地址
		 * @param saveFormElement formId
		 * @param callBack 成功回调函数
		 * @param errorCallBack 错误回调函数
		 */
		saveForm : function(url, saveFormElement, callBack, errorCallBack){
			if(!saveFormElement || saveFormElement == null || saveFormElement.length == 0){
	        	saveFormElement = "saveform";
	        }
	        $.ajax({
	    		type : 'POST',
	    		url : url,
	    		data : $('#' + saveFormElement).serialize(), // 你的formid
	    		error : function(msg) {
	    			jError("保存失败!" + msg.responseText, errorOperResultJNotifyOptions);
	    			if(errorCallBack){
	    				errorCallBack(msg);
	    			}
	    		},
	    		success : function(data) {
	    			if(data && data.success == true){
		            	jSuccess("保存成功!", bravoOperResultJNotifyOptions);
		            	if(callBack){
		            		callBack(data);
		    			}
		            }else if(data && data.msg){
		            	jError(data.msg, bravoOperResultJNotifyOptions);
		            	if(errorCallBack){
		    				errorCallBack(msg);
		    			}
		            }else{
		            	jError("保存失败!", bravoOperResultJNotifyOptions);
		            	if(errorCallBack){
		    				errorCallBack(msg);
		    			}
		            }
	    		}
	    	});
	    },
	    
		/**
		 * 绑定数字或者浮点类型输入框
		 * @param elementId input jquery查询元素
		 */
		bindNumberInput : function(element, isPrice){
			if($.jform.isEmpty(element)){
				return;
			}
			if(!isPrice){
				isPrice = false;
			}
			
			var _updateChange = function(){
				if(isPrice && isPrice == true){
					var tempVal = $(this).val();
					if($.jform.isEmpty(tempVal)){
						$(this).val('');
					}else{
						while(!$.jform.isNumber(tempVal)){
							$(this).val(tempVal.substring(0, tempVal.length - 1));
							tempVal = $(this).val();
						}
						if(!$.jform.isNumber(tempVal)){
							$(this).val(tempVal.substring(0, tempVal.length - 1));
						}
					}
				}else{
					$.jform.replaceInput($(this), /\D/g, '');
				}
			};
			
			//$(element).live('keyup change focus blur paste', _updateChange).css("ime-mode", "disabled");
		},
		
		/**
		 * 绑定为字母输入框
		 * @param elementId input jquery查询元素
		 * @param letterType 绑定类型 0为字母，1为小写，2为小写，默认为0
		 */
		bindLetterInput : function(element, letterType){
			if($.jform.isEmpty(element)){
				return;
			}
			var regex = /[^a-zA-Z]/g;
			regex = letterType == 1 ? /[^a-z]/g : letterType == 2 ? /[^A-Z]/g : regex;
			
			var _updateChange = function(){
				$.jform.replaceInput($(this), regex, '');
			};
			
			//$(element).live('keyup change focus blur paste', _updateChange).css("ime-mode", "disabled");
		},
		
		/**
		 * 针对jq对象进行替换val
		 * @param jq jquery对象
		 * @param regex 正则
		 * @param setValue 赋值value
		 */
		replaceInput : function(jq, regex, setValue){
			var _val = $.jform.replace($(jq).val(), regex, setValue);
			$(jq).val(_val);
		},
		
		/**
		 * 替换字符串
		 * @param val replace对象
		 * @param regex 正则
		 * @param setValue 赋值value
		 */
		replace : function(val, regex, setValue){
			while(val.match(regex)){
				val = val.replace(regex, setValue);
			}
			return val;
		},
		
		buildeDomTip : function(jq, msg, type){
			if(jq && msg){

				var pjq = jq.parent();
				var vName = jq.attr('name');
				var msgId = "span_msg_" + vName;
				var $msgId = "#" + msgId;

				if($($msgId).length <= 0){
					var html = "<div class='validformTipMsg' id='" + msgId + "'><div>";
					$(pjq).append(html);	
				}else{
				}

				var msgHtml = "<span class='dec'><s class='dec1'>&#9670;</s><s class='dec2'>&#9670;</s></span>";
				
				var showTypeClass = '';
				if(type == 1){
					showTypeClass = 'validformTipMsg_loading';
				}else if(type == 2){
					showTypeClass = 'validformTipMsg_right';
				}else if(type == 3){
					showTypeClass = 'validformTipMsg_wrong';
				}

				$($msgId).addClass(showTypeClass).attr('title', msg);
				
				$($msgId).html(msg + msgHtml);

				var jqPosition = $(jq).offset();
				var j_width = $(jq).innerWidth();
				var m_height = $($msgId).innerHeight();

				var x = (jqPosition.left + j_width) - 140;
				var y = jqPosition.top - m_height - 10;
				
				$($msgId).offset({top:y, left:x}).hide();

				return $msgId;
			}
		},
		
		bindValidform : function(jqForm){
			if($(jqForm).Validform){
				$(jqForm).Validform({
					showAllError: true,
					tiptype : function(msg, o, cssctl){
						//o:{obj:*,type:*,curform:*},
					    //obj指向的是当前验证的表单元素（或表单对象，验证全部验证通过，提交表单时o.obj为该表单对象），
					    //type指示提示的状态，值为1、2、3、4， 1：正在检测/提交数据，2：通过验证，3：验证失败，4：提示ignore状态, 
					    //curform为当前form对象;
					    //cssctl:内置的提示信息样式控制函数，该函数需传入两个参数：显示提示信息的对象 和 当前提示的状态（既形参o中的type）;
						
						var jq = o.obj;
						var $msgId = $.jform.buildeDomTip(jq, msg, o.type);

						cssctl($($msgId), o.type);
						
						if($msgId){
							if(o.type == 3){
								$($msgId).show();
								var verifyCode = $(jq).attr('verifyCode');
								// 如果为验证码验证失败，则重新刷新一次验证码
								if(verifyCode && refVerfiyCode){
									refVerfiyCode(verifyCode);
								}
							}else if(o.type == 2){
								$($msgId).hide();
							}
						}else{
							if(o.type == 3){
								alert(msg);
							}
						}
					}
				});
			}
		}
	}
});
